8963. Наименьшие влево

 

Задан массив из n целых чисел. Переместить все минимальные элементы в начало массива, не меняя порядок других.

 

Вход. В первой строке записано натуральное число n (n ≤ 100). В следующей строке записаны n целых чисел. Все числа по модулю не превышают 100.

 

Выход. Выведите элементы обновленного массива.

 

Пример входа

Пример выхода

7

6 -3 -7 4 -7 -4 5

-7 -7 6 -3 4 -4 5

 

 

РЕШЕНИЕ

массив

 

Анализ алгоритма

Найдем минимальный элемент min. Двигаемся по массиву справа налево и подвигаем неминимальные элементы вправо. Часть массива, которая останется слева, заполняем минимальным элементом.

 

Пример

Рассмотрим пример, приведенный в условии.

 

 

Реализация алгоритма

Объявим рабочий массив.

 

int m[101];

 

Читаем входной массив. Находим минимальный элемент min.

 

scanf("%d", &n);

min = 100;

for (i = 0; i < n; i++)

{

  scanf("%d", &m[i]);

  if (m[i] < min) min = m[i];

}

 

Объявим два индекса i и j. Двигаемся по массиву справа налево. Если m[j] не равно минимуму, то копируем это число в m[i].

 

i = n - 1;

for (j = n - 1; j >= 0; j--)

  if (m[j] != min)

  {

    m[i] = m[j];

    i--;

  }

 

Остальные элементы массива c индекса 0 до i следует заполнить минимальным элементом.

 

  while (i >= 0)

  {

    m[i] = min;

    i--;

  }

 

Выводим результирующий массив.

 

for (i = 0; i < n; i++)

  printf("%d ", m[i]);

printf("\n");